from src.utils.spherical_to_cartesian_coordinates import (
    spherical_to_cartesian_coordinates,
)


class User:
    """
    用户类，用于表示一个用户及其在空间中的位置和增益。
    """

    def __init__(
            self,
            idx,
            spherical_coordinates,
            gain_linear,
    ) -> None:
        """
        初始化用户对象。

        :param idx: 用户的索引，唯一标识用户。
        :param spherical_coordinates: 用户的球坐标 (r, θ, φ)。
        :param gain_linear: 用户的增益，线性值。
        """
        self.idx: int = idx  # 用户的唯一索引
        self.spherical_coordinates = spherical_coordinates  # 用户的球坐标
        self.cartesian_coordinates = spherical_to_cartesian_coordinates(spherical_coordinates)  # 计算并存储用户的直角坐标

        self.gain_linear: float = gain_linear  # 用户的增益，线性值

    def update_position(
            self,
            spherical_coordinates,
    ) -> None:
        """
        更新用户的位置。

        :param spherical_coordinates: 更新后的球坐标 (r, θ, φ)。
        """
        self.spherical_coordinates = spherical_coordinates  # 更新球坐标
        self.cartesian_coordinates = spherical_to_cartesian_coordinates(spherical_coordinates)  # 根据新的球坐标计算并更新直角坐标
